package com.jrx.anytxn.param.service.limit;

import com.jrx.anytxn.i18n.response.TxnPage;
import com.jrx.anytxn.common.exception.TxnException;
import com.jrx.anytxn.param.dto.limit.CreditLimitMappingReq;
import com.jrx.anytxn.param.dto.limit.CreditLimitMappingRes;
import com.jrx.anytxn.param.entity.PrCreditLimitMapping;

import java.util.List;

/**
 * @author by yf
 * @Classname ICreditLimitMappingService
 * @Description 额度节点映射service接口
 * @Date 2019/7/17 0017 下午 14:57
 */
public interface ICreditLimitMappingService {


    /**
     * 根据租户ID分页查询
     *
     * @param pageNum  页码
     * @param pageSize 页大小
     * @param tenantId 租户Id
     * @return com.jrx.anytxn.common.data.TxnPage<com.jrx.anytxn.param.dto.limit.CreditLimitMappingRes>
     * @author fan.yang
     * date: 2019/10/17 0017 下午 17:40
     */
    TxnPage<CreditLimitMappingRes> findAllPageByTenId(Integer pageNum, Integer pageSize, String tenantId) throws TxnException;

    /**
     * 根据租户ID，渠道和产品ID查询信息
     *
     * @param tenantId  租户ID
     * @param channel   渠道
     * @param productId 产品ID
     * @return com.jrx.anytxn.param.dto.limit.CreditLimitMappingRes
     * @author fan.yang
     * date: 2019/10/17 0017 下午 17:39
     */
    CreditLimitMappingRes findByTenIdAndChannelAndProId(String tenantId, String channel, String productId) throws TxnException;

    /**
     * 根据租户ID，渠道和产品ID删除信息
     *
     * @param tenantId  租户ID
     * @param channel   渠道
     * @param productId 产品ID
     * @return java.lang.Boolean
     * @author fan.yang
     * date: 2019/10/17 0017 下午 17:38
     */
    Boolean removeByTenIdAndChannelAndProId(String tenantId, String channel, String productId) throws TxnException;

    /**
     * 增加
     *
     * @param creditLimitMappingReq 额度节点映射请求参数
     * @return com.jrx.anytxn.param.dto.limit.CreditLimitMappingRes
     * @author fan.yang
     * date: 2019/10/17 0017 下午 17:45
     */
    CreditLimitMappingRes addLimitMapping(CreditLimitMappingReq creditLimitMappingReq) throws TxnException;

    /**
     * 修改
     *
     * @param creditLimitMappingReq 额度节点映射请求参数
     * @return com.jrx.anytxn.param.dto.limit.CreditLimitMappingRes
     * @author fan.yang
     * date: 2019/10/17 0017 下午 17:45
     */
    CreditLimitMappingRes modifyLimitMapping(CreditLimitMappingReq creditLimitMappingReq);

    /**
     * 根据组织号和渠道号，租户ID，获取产品有效的节点映射数据
     *
     * @param organizationId 机构号
     * @param channel        渠道
     * @param tenantId       租户ID
     * @return  List<PrCreditLimitMapping>
     * @author fan.yang
     * date: 2019/10/17 0017 下午 17:48
     */
    List<PrCreditLimitMapping> getLimitMappingByChannelAndOrgId(String organizationId, String channel, String tenantId);

    /**
     * 获取额度节点ID
     *
     * @param organizationId 机构号
     * @param channel        渠道
     * @param productId      产品ID
     * @param tenantId       租户ID
     * @return java.lang.String
     * @author fan.yang
     * date: 2019/10/17 0017 下午 17:50
     */
    String getLimitId(String organizationId, String channel, String productId, String tenantId);

    /**
     * 获取租户下所有额度节点ID
     * @param tenantId
     * @return
     */
    List<String> selectByTenantId(String tenantId);


    /**
     * 根据机构，渠道，租户，额度节点ID查询映射表
     * @param organizationId
     * @param channel
     * @param tenantId
     * @param limitId
     * @return
     */
    List<PrCreditLimitMapping> selectByTenantIdAndChannel(String organizationId, String channel, String tenantId, String limitId);


}
